<?php

namespace App\Http\Service;

use Illuminate\Support\Facades\DB;

/**
 * 获取聊天时的融云token和融云key
 * Class Chat
 * @package App\Http\Service
 */
class Chat
{
    /**
     * 获取融云token和key
     * $data  该用户在的信息
     */
    public function getTokenAndKey($data){
        $rong_token = DB::table("chat")->where(['uid'=>$data['uid']])->value("rong_token");

        if($rong_token){
            $return['token'] = $rong_token;
            $return['key']   = Config("data.rong.AppKey");
            return $return;
        }

        $returnJson = $this->getToken($data['uid'],$data['nickname'],$data['avatar']);
        $returnArr  = json_decode($returnJson,true);
        if($returnArr['code'] == 200){
            //将该用户的信息添加到聊天信息配置表中
            $res = DB::table("chat")->insert([
                'uid'        => $data['uid'],
                'rong_token' => $returnArr['token'],
                'created_at' => date("Y/m/d H:i")
            ]);
            if($res){
                $return['token'] = $returnArr['token'];
                $return['key']   = Config("data.rong.AppKey");
                return $return;
            }else{
                throw new \Exception('请稍后重试');
            }
        }
    }


    /**
     * 获取 Chat 方法
     * @param $userId   用户 Id，最大长度 32 字节。是用户在 App 中的唯一标识码，必须保证在同一个 App 内不重复，重复的用户 Id 将被当作是同一用户。
     * @param $name     用户名称，最大长度 128 字节。用来在 Push 推送时，或者客户端没有提供用户信息时，显示用户的名称。
     * @param $portraitUri  用户头像 URI，最大长度 1024 字节。
     * @return json|xml
     *
     * @param "/user/getToken" 获取融云token的链接
     */
    public function getToken($userId, $name, $portraitUri) {
        $common = new Common;
        try{
            if(empty($userId))
                throw new \Exception('用户 Id 不能为空');
            if(empty($name))
                throw new \Exception('用户名称 不能为空');
            if(empty($portraitUri))
                throw new \Exception('用户头像 URI 不能为空');

            $ret = $common->curl('/user/getToken',array('userId'=>$userId,'name'=>$name,'portraitUri'=>$portraitUri));

            if(empty($ret))
                throw new \Exception('请求失败');
            return $ret;
        }catch (\Exception $e) {
            return $e->getMessage();
        }
    }
}
